5.1 数値を記憶する
記憶の必要性と変数
前章の 4.2 基本的な計算 で、既に私の方が解説したプログラムで変数を例として出しておりました。
以下、同じプログラムになりますが、result が変数にあたります。
int main(void)
{
int result;
result = 100 + 200;
return 0;
}
変数とは、値や文字情報を一時的に記憶させておく媒体になります。
上記のプログラムでは、100 + 200の演算結果である 300 という値をresultという名前の変数に一時的に保存しています。
変数はメモリの一部を使用するため、変数をたくさん生成(=用意)すると、メモリ容量が減ります。
マイコンであれ、パソコンであれメモリ容量は有限なので、使用する量には注意が必要です。
特に、マイコンの場合はメモリ資源がパソコンほど多くないです。
PCなどのアプリケーション設計者が、組み込みプログラムを苦手とする一つの理由に、メモリ管理の方法がわからない。その経験がないのでどうすればよいのかわからない。といった理由が挙げられます。
逆に言えば、昨今のパソコンはメモリ大容量化が適い、メモリ使用量をあまり意識しなくてもプログラミングできる。とも言えます。
変数の宣言方法
変数宣言のルールは以下の通りです。
型名 変数名
型名の種類はいくつかありますが、「5.2 変数の種類」で解説したいと思います。
ここでは、上記プログラム例で記載しましたintを覚えておいてください。
intは、過去の章でも記載しましたが、数値を入れる型(=入れ物)です。
変数名は、格納する値に関連する名前を付けることが慣習となります。
例えば、A/D変換をした結果を格納するのであれば、ad_res_valueとしたり、
汎用的に且つ計算上で一時的にデータを入れておく様な使い方をしたい変数なのであれば、
tempと名付けたりします。
変数名のルールは以下になります。
・半角アルファベット、半角数字、半角記号( _ )が使える
・先頭文字は数字を使うことができない
・C言語の予約語も使えない(例: main は使えない)
関数の時に解説したルールと全く同じなので、名づけ規則は基本的に同じルールなのだと理解ください。
変数の宣言場所
変数は関数の先頭でしか宣言できません。
何度も出現するプログラム例ですが、main関数の先頭で int result; としています。
これを、result = 100 + 200; return 0;の後に書くことはルール違反になります。
なので、変数は関数の先頭行に記載すること。と覚えておいてください。
int main(void)
{
int result;
result = 100 + 200;
return 0;
}
変数への値の代入
100 + 200の数値を代入しているプログラムを何度かご紹介していますので、何となく理解は頂けていると思いますが、 = で記載をすることで右辺の数値や演算結果が左辺の変数へ代入されます。
result = 100 + 200;
また、この変数は何度でも使用することが可能です。
例えば、以下の様なプログラムを書いて、何度も使用することが可能です。
それぞれの行でresultに入る値は異なります。
int main(void)
{
int result;
/* 演算結果の300がresultへ格納される */
result = 100 + 200;
/* ここでは 0 がresultへ格納される */
result = 0;
/* 演算結果の100がresultへ格納される */
result = 200 - 100;
return 0;
}
変数を数値の代わりに使う
変数には値を記憶させておく機能があると解説しましたが、記憶させた値を使うことができます。
少しだけ複雑にしたプログラム例を記載します。
int main(void){
{
int result_1;
int result_2;
/* 演算結果の300がresultへ格納される */
result_1 = 100 + 200;
/* ここではresult_1の値(300) + 10された結果がresult_2へ格納される */
result_2 = result_1 + 10;
printf("%d\n",result_2);
return 0;
}
関数の先頭行で int result_1;を宣言して、その次の行で int result_2;を宣言しました。
変数は連続して宣言する場合にのみ、先頭行から次行へ宣言を書いても良いことになっています。
10個変数を宣言したい場合、10行に渡って宣言を記載する。ということになり、これはルール違反になりません。
これまでと同じく、result_1には100 + 200の演算結果である300が格納されています。
その2行下のプログラムでは、result_2へ、result_1に格納された値と10を加算した結果を格納しています。
printfはresult_2の中身に入っている値を確認するために用意したものなので、
いつもの通りブラウザのC言語ツールで上記のプログラムをコピペして確認してみてください。
https://paiza.io/ja/projects/new?language=c

実行すると左下の数値は、310になっています。
つまり、result_1 + 10の結果が表示されています。
ちなみに、result_2 = 100 + 200 + 10;と書いても同じ結果になります。
何故、変数の値を演算に使うのか?ですが、プログラム量が肥大していき、
もっと複雑な処理をコーディングするようになりますと、直接数値で書かれた値は何を意味しているのか?が分からなくなります。
変数名は格納される数値に関連のある名前にしましょう。とお伝えした通り、処理に関わりのある値の意味が不明になると、プログラムで書きたい処理がズレていくことになりかねません。
その為、変数を用いて演算をさせる機会が通常の様に出現するので覚えておいてください。
変数への代入と演算を同時に行う
すでに result = 100 + 200; で書いてある通りなのですが、左辺に右辺の値を = で代入しますが、右辺は演算式を書くことでその結果が左辺へ格納されます。
代入と演算を1行で同時に行うことができるというものです。
他、書き方になりますが以下の様な記載も可能です。
result = 100;
result += 200;
最初の行でresultへ100を代入しています。
次行で += という書き方をすることで、resultの値に右辺の値を加算して代入できます。
最終的にresultの中身は、300になりますので、100 + 200と書いた場合と同じ結果になります。
以下の様な書き方もできます。
result = 100;
result = result + 200;
上記で、resultの値に右辺の値を加算して代入できる。と書きましたので、同じ意味になります。
どの様な書き方が正解か?はありませんので、自分が分かりやすい書き方で、自分なりの流儀を確立していただければと思います。
result += 200;
こう書いた方がイメージがしやすいのか、
result = result + 200;
この方が、処理の内容がイメージしやすいのか・・・。人それぞれなのでここはこだわりがありません。
ここで出現した += ですが、他にも同じ様に演算子として種類があります。
四則演算の内容が違うだけで処理のイメージは、加算で解説した内容と同じです。
| 演算子 | 機能 |
| += | 右辺の変数値と左辺値を加算して代入 |
| -= | 右辺の変数値と左辺値を減算して代入 |
| *= | 右辺の変数値と左辺値を乗算して代入 |
| /= | 右辺の変数値と左辺値を除算して代入 |
| %= | 右辺の変数値と左辺値を剰余算して代入 |